/**
 * 在这里定义用户相关的路由处理函数，供/router/user使用
 */

const db = require('../db/index')
// bcryptjs用来加密 密码
const bcrypt = require('bcryptjs')
// 用来生成token字符串
const jwt = require('jsonwebtoken')
// 导入配置文件
const config = require('../config')

// 注册用户处理函数
/**
 * 1：检测表单数据是否合法
 * 2：检测用户名是否被占用
 * 3：对密码进行加密处理
 * 4：插入新用户
 */
exports.regUser = (req, res) => {
  const userinfo = req.body

  if (!userinfo.username || !userinfo.password) {
    return res.send({status: 1, message: '用户名或密码不能为空！'})
  }
  const sql = `select * from users where username=?`
  db.query(sql, [userinfo.username], (err, result) => {
    if (err) {
      return res.send({status: 1, message: err.message})
    }
    if (result.length > 0) {
      return res.send({status: 1, message: '用户名已存在！'})
    }
    // 对用户的密码，进行bcrype加密返回值是加密之后的密码字符串
    userinfo.password = bcrypt.hashSync(userinfo.password, 10)
    const sql1 = 'insert into users set ?'
    db.query(sql1, {username: userinfo.username, password: userinfo.password}, (err, result) => {
      if (err) return res.send({status: 1, message: err.message})
      if (result.affectedRows !== 1) {
        return res.send({status: 1, message: '注册用户失败, 请稍后再试！'})
      }
      // 注册成功
      res.send({status: 0, message: '注册成功'})
    })
  })
}

// 登录的处理函数
exports.login = (req, res) => {
  const sql = `select * from users where username=?`
  const userinfo = req.body

  db.query(sql, userinfo.username, (err, result) => {
    if (err) return res.cc(err)
    // 执行sql语句成功，但是查询到数据条数不等于1
    if (result.length !== 1) return res.cc("登录失败")
    const compareResult = bcrypt.compareSync(userinfo.password, result[0].password)
    const user = { ...result[0], password: '' }
    const tokerStr = jwt.sign(user, config.jwtSecretKey, {
      expiresIn: '10h' // token 有效期为10个小时
    })
    if (!compareResult) {
      return res.send('密码不对')
    }
    return res.send({
      status: 0,
      message: '登录成功',
      token: 'Bearer ' + tokerStr
    })
  })
}

// 个人信息
exports.info = (req, res) => {
  const sql = `select * from users where username='admin'`

  db.query(sql, (err, result) => {
    if (err) {
      console.log(err)
      return
    }

    console.log(result, 99)
    res.send({
      status: 0,
      data: "ccc",
    })
  })
}